package com.xique.door.biz.service;

import com.xique.common.core.web.domain.AjaxResult;
import com.xique.door.bean.domain.AccessDevice;
import com.xique.door.bean.domain.User;
import com.xique.door.bean.request.device.DeviceDeleteRequest;
import com.xique.door.bean.request.deviceUser.*;
import com.xique.door.bean.vo.user.UserListVo;
import sun.misc.Request;

import java.util.List;

/**
 * @author shd
 * @create 2022/1/28 14:26
 */
public interface IDeviceUserBizService {

    /**
     * 已授权用户列表
     *
     * @param request
     * @return java.util.List<com.xique.door.bean.domain.UserDevice>
     * @author shd
     * @date 2022/1/28 14:36
     */
    List<UserListVo> selectAssignedDeviceUserList(DeviceUserSelectListRequest request);

    /**
     * 未授权用户选择列表
     *
     * @param request
     * @return com.xique.common.core.web.domain.AjaxResult
     * @author shd
     * @date 2022/2/9 16:08
     */
    AjaxResult selectUnAssignedDeviceUserList(DeviceUserSelectListRequest request);

    /**
     * @description: 下发-新增用户
     * @author caogq
     * @date 2022/2/15 16:18
     */
    AjaxResult addDeviceUser(DeviceAddUserRequest request);

    /**
     * @description: 下发-删除用户
     * @author caogq
     * @date 2022/2/15 16:18
     */
    AjaxResult removeDeviceUser(DeviceDeleteUserRequest request);

    /**
     * @description: 单个设备下发单个用户
     * @author caogq
     * @date: 2022/2/16 19:01
     */
    AjaxResult addDeviceUser(AccessDevice accessDevice, User user);
    /**
     * @description: 单个设备下发多个用户
     * @author caogq
     * @date: 2022/2/16 19:01
     */
    AjaxResult addDeviceUsers(AccessDevice accessDevice, List<User> users);

    /**
     * @description: 单个设备删除单个用户
     * @author caogq
     * @date: 2022/2/16 19:01
     */
    AjaxResult removeDeviceUser(AccessDevice accessDevice, User user);
    /**
     * @description: 单个设备删除多个用户
     * @author caogq
     * @date: 2022/2/16 19:01
     */
    AjaxResult removeDeviceUsers(AccessDevice accessDevice, List<User> users);

    /**
     * @param request
     * @description: 全量删除设备下所有用户
     * @author taojc
     * @date: 2022/8/16
     */
    void removeAllDeviceUsers(DeviceDeleteRequest request);

    /**
     * @description:  全量下发设备中已有的用户
     * @author caogq
     * @date: 2022/2/16 19:49
     * @Param
     */
    AjaxResult addAllDeviceUser(DeviceDeleteUserRequest request);

    /**
     * @description:  查询所有设备的下发记录
     * @author caogq
     * @date: 2022/3/5 10:06
     * @Param
     */
    List<UserListVo> selectAllDevicesUserList(DeviceUserSelectListRequest request);

    /**
     * 多个设备多个用户下发
     * @author shd
     * @date 2022/4/9 13:33
     * @param request
     * @return com.xique.common.core.web.domain.AjaxResult
     */
    AjaxResult addBatchDeviceAndUser(DeviceBatchUserListRequest request);
}
